{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 导入必要的各种包\n",
    "import pandas as pd\n",
    "from pandas.core.api import DataFrame\n",
    "import matplotlib.pyplot as plt\n",
    "from pyreadstat import pyreadstat\n",
    "import mytools"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 打开数据文档\n",
    "df0,metadata =pyreadstat.read_sav(R\"企业形象调查原始数据.sav\",apply_value_formats=True)\n",
    "# 使用自定义工具包中的函数读取spss格式文件\n",
    "df1,metadata = mytools.read_spss(R\"企业形象调查原始数据.sav\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 清理数据\n",
    "## 清理空白值\n",
    "### 查看所有空白值\n",
    "temp = df1[df1.isnull().T.any()]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "### 删除指定的空白值\n",
    "\"\"\"\n",
    "## 使用dropna方法删除空值 #card\n",
    "\n",
    "1. `axis`，用于指定操作行还是列。`0`代表行，`1`代表列，默认为`0`。\n",
    "2. `how`，其值为`\"any\"`和`\"all\"`，`\"any\"`表示只要有空值，就删除。`\"all\"`表示一行或一列的所有值为空才删除。默认为`\"any\"`。\n",
    "3. `thresh`，表示保留至少含有`n`个非`na`数值的行或列。默认为`None`。\n",
    "4. `subset`，用来指定在那些列中查找缺失值。例如`df.dropna(subset=['name', 'born'])`表示删除在`'name'`和` 'born'`列含有缺失值的行。默认为`None`。\n",
    "5. `inplace`，表示是否直接在原DataFrame修改。默认为`False`，即不修改原数据框。\n",
    "\"\"\"\n",
    "df2 = df1.dropna(thresh=32)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "### 如果要删除所有空值，执行下面语句即可\n",
    "df3 = df2.dropna()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "## 删除重复值\n",
    "df4 = df3.drop_duplicates(subset=['问卷编号'],keep='first')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>问卷编号</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>调查员</th>\n",
       "      <td>object</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>性别</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>年龄</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>职业</th>\n",
       "      <td>object</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>伙食费</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>常去的快餐店</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>欢乐聚餐</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>快乐童年</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>都市生活</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>洋溢青春</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>其他感受</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>德克士类型感知</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>服务态度</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>健康安全</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>快速便捷</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>价格昂贵</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>口感不好</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>品类太少</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>其他评价</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>快速好吃</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>服务好</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>种类多</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>价格便宜</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>其他吸引因素</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>服务态度需改进</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>送餐速度</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>就餐环境</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>产品价格</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>促销活动</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>产品种类</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>其他改进因素</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>德克士企业认知度</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>德克士广告接触度</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>德克士就职意愿</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>德克士股票</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>德克士综合评价</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>肯德基企业认知度</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>肯德基广告接触度</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>肯德基就职意愿</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>肯德基股票</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>肯德基综合评价</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>麦当劳企业认知度</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>麦当劳广告接触度</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>麦当劳就职意愿</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>麦当劳股票</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>麦当劳综合评价</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>必胜客企业认知度</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>必胜客广告接触度</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>必胜客就职意愿</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>必胜客股票</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>必胜客综合评价</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 0\n",
       "问卷编号       float64\n",
       "调查员         object\n",
       "性别        category\n",
       "年龄         float64\n",
       "职业          object\n",
       "伙食费       category\n",
       "常去的快餐店    category\n",
       "欢乐聚餐       float64\n",
       "快乐童年       float64\n",
       "都市生活       float64\n",
       "洋溢青春       float64\n",
       "其他感受       float64\n",
       "德克士类型感知   category\n",
       "服务态度      category\n",
       "健康安全       float64\n",
       "快速便捷       float64\n",
       "价格昂贵       float64\n",
       "口感不好       float64\n",
       "品类太少       float64\n",
       "其他评价       float64\n",
       "快速好吃       float64\n",
       "服务好        float64\n",
       "种类多        float64\n",
       "价格便宜       float64\n",
       "其他吸引因素     float64\n",
       "服务态度需改进    float64\n",
       "送餐速度       float64\n",
       "就餐环境       float64\n",
       "产品价格       float64\n",
       "促销活动       float64\n",
       "产品种类       float64\n",
       "其他改进因素     float64\n",
       "德克士企业认知度  category\n",
       "德克士广告接触度  category\n",
       "德克士就职意愿   category\n",
       "德克士股票     category\n",
       "德克士综合评价   category\n",
       "肯德基企业认知度  category\n",
       "肯德基广告接触度  category\n",
       "肯德基就职意愿   category\n",
       "肯德基股票     category\n",
       "肯德基综合评价   category\n",
       "麦当劳企业认知度  category\n",
       "麦当劳广告接触度  category\n",
       "麦当劳就职意愿   category\n",
       "麦当劳股票     category\n",
       "麦当劳综合评价   category\n",
       "必胜客企业认知度  category\n",
       "必胜客广告接触度  category\n",
       "必胜客就职意愿   category\n",
       "必胜客股票     category\n",
       "必胜客综合评价   category"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "## 检查数据类型\n",
    "\n",
    "### 查看所有变量的数据类型\n",
    "df4.dtypes.to_frame()\n",
    "### 使用dtypes属性可以查看所有变量或指定变量的类型。\n",
    "### 使用to_frame方法的目的在于输出更加整洁的文本，非必须。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>问卷编号</th>\n",
       "      <td>int32</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>调查员</th>\n",
       "      <td>object</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>性别</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>年龄</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>职业</th>\n",
       "      <td>object</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>伙食费</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>常去的快餐店</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>欢乐聚餐</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>快乐童年</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>都市生活</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>洋溢青春</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>其他感受</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>德克士类型感知</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>服务态度</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>健康安全</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>快速便捷</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>价格昂贵</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>口感不好</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>品类太少</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>其他评价</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>快速好吃</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>服务好</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>种类多</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>价格便宜</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>其他吸引因素</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>服务态度需改进</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>送餐速度</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>就餐环境</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>产品价格</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>促销活动</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>产品种类</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>其他改进因素</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>德克士企业认知度</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>德克士广告接触度</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>德克士就职意愿</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>德克士股票</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>德克士综合评价</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>肯德基企业认知度</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>肯德基广告接触度</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>肯德基就职意愿</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>肯德基股票</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>肯德基综合评价</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>麦当劳企业认知度</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>麦当劳广告接触度</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>麦当劳就职意愿</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>麦当劳股票</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>麦当劳综合评价</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>必胜客企业认知度</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>必胜客广告接触度</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>必胜客就职意愿</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>必胜客股票</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>必胜客综合评价</th>\n",
       "      <td>category</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 0\n",
       "问卷编号         int32\n",
       "调查员         object\n",
       "性别        category\n",
       "年龄         float64\n",
       "职业          object\n",
       "伙食费       category\n",
       "常去的快餐店    category\n",
       "欢乐聚餐       float64\n",
       "快乐童年       float64\n",
       "都市生活       float64\n",
       "洋溢青春       float64\n",
       "其他感受       float64\n",
       "德克士类型感知   category\n",
       "服务态度      category\n",
       "健康安全       float64\n",
       "快速便捷       float64\n",
       "价格昂贵       float64\n",
       "口感不好       float64\n",
       "品类太少       float64\n",
       "其他评价       float64\n",
       "快速好吃       float64\n",
       "服务好        float64\n",
       "种类多        float64\n",
       "价格便宜       float64\n",
       "其他吸引因素     float64\n",
       "服务态度需改进    float64\n",
       "送餐速度       float64\n",
       "就餐环境       float64\n",
       "产品价格       float64\n",
       "促销活动       float64\n",
       "产品种类       float64\n",
       "其他改进因素     float64\n",
       "德克士企业认知度  category\n",
       "德克士广告接触度  category\n",
       "德克士就职意愿   category\n",
       "德克士股票     category\n",
       "德克士综合评价   category\n",
       "肯德基企业认知度  category\n",
       "肯德基广告接触度  category\n",
       "肯德基就职意愿   category\n",
       "肯德基股票     category\n",
       "肯德基综合评价   category\n",
       "麦当劳企业认知度  category\n",
       "麦当劳广告接触度  category\n",
       "麦当劳就职意愿   category\n",
       "麦当劳股票     category\n",
       "麦当劳综合评价   category\n",
       "必胜客企业认知度  category\n",
       "必胜客广告接触度  category\n",
       "必胜客就职意愿   category\n",
       "必胜客股票     category\n",
       "必胜客综合评价   category"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### 使用astypes方法设定变量的类型\n",
    "df5 = df4.astype({'问卷编号':'int'})\n",
    "df5.dtypes.to_frame()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "一般     224\n",
       "不错     139\n",
       "很好      33\n",
       "不好      17\n",
       "0.0      3\n",
       "Name: 服务态度, dtype: int64"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\"\"\"\n",
    "异常值清理\n",
    "\n",
    "类别变量异常值的查看及修改\n",
    "\n",
    "使用value_counts方法可以查看类别变量的取值及次数\n",
    "\"\"\"\n",
    "df5['服务态度'].value_counts()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "男性      211\n",
      "女性      204\n",
      "22.0      1\n",
      "Name: 性别, dtype: int64\n",
      "六百到九百     138\n",
      "九百到一千二    120\n",
      "一千二以上      85\n",
      "三百到六百      73\n",
      "Name: 伙食费, dtype: int64\n",
      "肯德基       136\n",
      "德克士        78\n",
      "从不去快餐店     77\n",
      "麦当劳        62\n",
      "必胜客        44\n",
      "其他         19\n",
      "Name: 常去的快餐店, dtype: int64\n",
      "普遍大众    188\n",
      "时尚新颖     91\n",
      "中西合璧     88\n",
      "古板单调     32\n",
      "其他类型     17\n",
      "Name: 德克士类型感知, dtype: int64\n",
      "一般     224\n",
      "不错     139\n",
      "很好      33\n",
      "不好      17\n",
      "0.0      3\n",
      "Name: 服务态度, dtype: int64\n",
      "一点印象都没有    123\n",
      "只知道名字      120\n",
      "只知道几项       99\n",
      "大致了解        65\n",
      "非常了解         7\n",
      "0.0          2\n",
      "Name: 德克士企业认知度, dtype: int64\n",
      "偶尔看到     161\n",
      "从未看过     113\n",
      "有时会看到     91\n",
      "常常会看到     51\n",
      "0.0        0\n",
      "Name: 德克士广告接触度, dtype: int64\n",
      "不想去            167\n",
      "到该公司也不错        118\n",
      "不知道             90\n",
      "一定想办法到该公司工作     40\n",
      "0.0              1\n",
      "Name: 德克士就职意愿, dtype: int64\n",
      "不想买      154\n",
      "不知道      111\n",
      "买了也不错    100\n",
      "一定会买      50\n",
      "0.0        1\n",
      "Name: 德克士股票, dtype: int64\n",
      "二流     166\n",
      "一流      84\n",
      "三流      84\n",
      "不知道     81\n",
      "0.0      1\n",
      "Name: 德克士综合评价, dtype: int64\n",
      "只知道几项      129\n",
      "只知道名字      128\n",
      "大致了解       104\n",
      "一点印象都没有     33\n",
      "非常了解        18\n",
      "0.0          4\n",
      "Name: 肯德基企业认知度, dtype: int64\n",
      "偶尔看到     140\n",
      "常常会看到    118\n",
      "有时会看到    112\n",
      "从未看过      45\n",
      "0.0        1\n",
      "Name: 肯德基广告接触度, dtype: int64\n",
      "到该公司也不错        143\n",
      "不想去            141\n",
      "不知道             85\n",
      "一定想办法到该公司工作     44\n",
      "0.0              3\n",
      "Name: 肯德基就职意愿, dtype: int64\n",
      "买了也不错    140\n",
      "不想买      117\n",
      "不知道      102\n",
      "一定会买      54\n",
      "0.0        3\n",
      "Name: 肯德基股票, dtype: int64\n",
      "二流     198\n",
      "一流     131\n",
      "不知道     52\n",
      "三流      32\n",
      "0.0      3\n",
      "Name: 肯德基综合评价, dtype: int64\n",
      "只知道几项      150\n",
      "只知道名字      128\n",
      "大致了解        89\n",
      "一点印象都没有     38\n",
      "非常了解         6\n",
      "0.0          5\n",
      "Name: 麦当劳企业认知度, dtype: int64\n",
      "偶尔看到     142\n",
      "有时会看到    127\n",
      "常常会看到     99\n",
      "从未看过      43\n",
      "0.0        4\n",
      "5.0        1\n",
      "Name: 麦当劳广告接触度, dtype: int64\n",
      "不想去            147\n",
      "到该公司也不错        145\n",
      "不知道             87\n",
      "一定想办法到该公司工作     33\n",
      "0.0              4\n",
      "Name: 麦当劳就职意愿, dtype: int64\n",
      "不想买      135\n",
      "不知道      121\n",
      "买了也不错    120\n",
      "一定会买      36\n",
      "0.0        4\n",
      "Name: 麦当劳股票, dtype: int64\n",
      "二流     170\n",
      "一流     126\n",
      "不知道     79\n",
      "三流      38\n",
      "0.0      3\n",
      "Name: 麦当劳综合评价, dtype: int64\n",
      "只知道名字      148\n",
      "只知道几项      106\n",
      "一点印象都没有     80\n",
      "大致了解        68\n",
      "非常了解        12\n",
      "0.0          2\n",
      "Name: 必胜客企业认知度, dtype: int64\n",
      "偶尔看到     140\n",
      "有时会看到    118\n",
      "从未看过      87\n",
      "常常会看到     70\n",
      "0.0        1\n",
      "5.0        0\n",
      "Name: 必胜客广告接触度, dtype: int64\n",
      "不想去            161\n",
      "不知道            124\n",
      "到该公司也不错         97\n",
      "一定想办法到该公司工作     29\n",
      "0.0              5\n",
      "Name: 必胜客就职意愿, dtype: int64\n",
      "不知道      149\n",
      "不想买      130\n",
      "买了也不错     95\n",
      "一定会买      38\n",
      "0.0        4\n",
      "Name: 必胜客股票, dtype: int64\n",
      "二流     150\n",
      "一流     114\n",
      "不知道     90\n",
      "三流      58\n",
      "0.0      4\n",
      "Name: 必胜客综合评价, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "\"\"\" 列出所有类别变量 \"\"\"\n",
    "for col in df5.columns[df5.dtypes=='category']:\n",
    "    print(df5[col].value_counts())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "男性      211\n",
      "女性      204\n",
      "22.0      1\n",
      "Name: 性别, dtype: int64\n",
      "六百到九百     138\n",
      "九百到一千二    120\n",
      "一千二以上      85\n",
      "三百到六百      73\n",
      "Name: 伙食费, dtype: int64\n",
      "肯德基       136\n",
      "德克士        78\n",
      "从不去快餐店     77\n",
      "麦当劳        62\n",
      "必胜客        44\n",
      "其他         19\n",
      "Name: 常去的快餐店, dtype: int64\n",
      "普遍大众    188\n",
      "时尚新颖     91\n",
      "中西合璧     88\n",
      "古板单调     32\n",
      "其他类型     17\n",
      "Name: 德克士类型感知, dtype: int64\n",
      "一般     224\n",
      "不错     139\n",
      "很好      33\n",
      "不好      17\n",
      "0.0      3\n",
      "Name: 服务态度, dtype: int64\n",
      "一点印象都没有    123\n",
      "只知道名字      120\n",
      "只知道几项       99\n",
      "大致了解        65\n",
      "非常了解         7\n",
      "0.0          2\n",
      "Name: 德克士企业认知度, dtype: int64\n",
      "偶尔看到     161\n",
      "从未看过     113\n",
      "有时会看到     91\n",
      "常常会看到     51\n",
      "0.0        0\n",
      "Name: 德克士广告接触度, dtype: int64\n",
      "不想去            167\n",
      "到该公司也不错        118\n",
      "不知道             90\n",
      "一定想办法到该公司工作     40\n",
      "0.0              1\n",
      "Name: 德克士就职意愿, dtype: int64\n",
      "不想买      154\n",
      "不知道      111\n",
      "买了也不错    100\n",
      "一定会买      50\n",
      "0.0        1\n",
      "Name: 德克士股票, dtype: int64\n",
      "二流     166\n",
      "一流      84\n",
      "三流      84\n",
      "不知道     81\n",
      "0.0      1\n",
      "Name: 德克士综合评价, dtype: int64\n",
      "只知道几项      129\n",
      "只知道名字      128\n",
      "大致了解       104\n",
      "一点印象都没有     33\n",
      "非常了解        18\n",
      "0.0          4\n",
      "Name: 肯德基企业认知度, dtype: int64\n",
      "偶尔看到     140\n",
      "常常会看到    118\n",
      "有时会看到    112\n",
      "从未看过      45\n",
      "0.0        1\n",
      "Name: 肯德基广告接触度, dtype: int64\n",
      "到该公司也不错        143\n",
      "不想去            141\n",
      "不知道             85\n",
      "一定想办法到该公司工作     44\n",
      "0.0              3\n",
      "Name: 肯德基就职意愿, dtype: int64\n",
      "买了也不错    140\n",
      "不想买      117\n",
      "不知道      102\n",
      "一定会买      54\n",
      "0.0        3\n",
      "Name: 肯德基股票, dtype: int64\n",
      "二流     198\n",
      "一流     131\n",
      "不知道     52\n",
      "三流      32\n",
      "0.0      3\n",
      "Name: 肯德基综合评价, dtype: int64\n",
      "只知道几项      150\n",
      "只知道名字      128\n",
      "大致了解        89\n",
      "一点印象都没有     38\n",
      "非常了解         6\n",
      "0.0          5\n",
      "Name: 麦当劳企业认知度, dtype: int64\n",
      "偶尔看到     142\n",
      "有时会看到    127\n",
      "常常会看到     99\n",
      "从未看过      43\n",
      "0.0        4\n",
      "5.0        1\n",
      "Name: 麦当劳广告接触度, dtype: int64\n",
      "不想去            147\n",
      "到该公司也不错        145\n",
      "不知道             87\n",
      "一定想办法到该公司工作     33\n",
      "0.0              4\n",
      "Name: 麦当劳就职意愿, dtype: int64\n",
      "不想买      135\n",
      "不知道      121\n",
      "买了也不错    120\n",
      "一定会买      36\n",
      "0.0        4\n",
      "Name: 麦当劳股票, dtype: int64\n",
      "二流     170\n",
      "一流     126\n",
      "不知道     79\n",
      "三流      38\n",
      "0.0      3\n",
      "Name: 麦当劳综合评价, dtype: int64\n",
      "只知道名字      148\n",
      "只知道几项      106\n",
      "一点印象都没有     80\n",
      "大致了解        68\n",
      "非常了解        12\n",
      "0.0          2\n",
      "Name: 必胜客企业认知度, dtype: int64\n",
      "偶尔看到     140\n",
      "有时会看到    118\n",
      "从未看过      87\n",
      "常常会看到     70\n",
      "0.0        1\n",
      "5.0        0\n",
      "Name: 必胜客广告接触度, dtype: int64\n",
      "不想去            161\n",
      "不知道            124\n",
      "到该公司也不错         97\n",
      "一定想办法到该公司工作     29\n",
      "0.0              5\n",
      "Name: 必胜客就职意愿, dtype: int64\n",
      "不知道      149\n",
      "不想买      130\n",
      "买了也不错     95\n",
      "一定会买      38\n",
      "0.0        4\n",
      "Name: 必胜客股票, dtype: int64\n",
      "二流     150\n",
      "一流     114\n",
      "不知道     90\n",
      "三流      58\n",
      "0.0      4\n",
      "Name: 必胜客综合评价, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "### 使用自定义函数打印初全部类别变量取值\n",
    "mytools.print_all_cats(df5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "### 找出类别变量的异常值并修改\n",
    "df5.query('性别==22')\n",
    "df5.loc[322,'性别'] = '女性'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "df5.query('服务态度==0')\n",
    "df5.loc[(101,197,258),'服务态度'] = '不好'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "df5.query('德克士企业认知度==0')\n",
    "df5.loc[(220,357),'德克士企业认知度'] = '一点印象都没有'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "df5.query('德克士就职意愿==0')\n",
    "df5.loc[(220,357),'德克士就职意愿'] = '不想去'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "df5.query('德克士股票==0')\n",
    "df5.loc[223,'德克士股票'] = '不想买'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "df5.query('德克士综合评价==0')\n",
    "df5.loc[223,'德克士综合评价'] = '三流'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "df5.query('肯德基企业认知度==0')\n",
    "df5.loc[(352,353,357,359),'肯德基企业认知度'] = '一点印象都没有'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "df5.query('肯德基广告接触度==0')\n",
    "df5.loc[223,'肯德基广告接触度'] = '从未看过'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "df5.query('肯德基就职意愿==0')\n",
    "df5.loc[(352,353,359),'肯德基就职意愿'] = '不想去'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "df5.query('肯德基股票==0')\n",
    "df5.loc[(352,353,223),'肯德基股票'] = '不想买'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "df5.query('肯德基综合评价==0')\n",
    "df5.loc[(352,353,223),'肯德基综合评价'] = '三流'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "df5.query('麦当劳企业认知度==0')\n",
    "df5.loc[(352,353,223,357,361),'麦当劳企业认知度'] = '一点印象都没有'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "df5.query('麦当劳广告接触度==0')\n",
    "df5.loc[(220,352,353,361),'麦当劳广告接触度'] = '从未看过'\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "df5.query('麦当劳广告接触度==5')\n",
    "df5.loc[404,'麦当劳广告接触度'] = '常常会看到'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "df5.query('麦当劳股票==0')\n",
    "df5.loc[(352,353,223,357),'麦当劳股票'] = '不想买'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "df5.query('麦当劳综合评价==0')\n",
    "df5.loc[(352,353,357),'麦当劳综合评价'] = '三流'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "df5.query('必胜客企业认知度==0')\n",
    "df5.loc[(352,353),'必胜客企业认知度'] = '一点印象都没有'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "df5.query('必胜客广告接触度==0')\n",
    "df5.loc[352,'必胜客广告接触度'] = '从未看过'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "df5.query('麦当劳就职意愿==0')\n",
    "df5.loc[(222,352,353,357),'麦当劳就职意愿'] = '不想去'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count       416.000000\n",
       "mean        513.247596\n",
       "std        4893.048164\n",
       "min           1.000000\n",
       "25%         140.750000\n",
       "50%         259.000000\n",
       "75%         392.000000\n",
       "max      100000.000000\n",
       "Name: 问卷编号, dtype: float64"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### 查看数值变量的异常值\n",
    "### 使用describe方法对数值变量进行描述统计，可得到最小值、最大值、方差等信息\n",
    "df5['问卷编号'].describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "count       416.000000\n",
      "mean        513.247596\n",
      "std        4893.048164\n",
      "min           1.000000\n",
      "25%         140.750000\n",
      "50%         259.000000\n",
      "75%         392.000000\n",
      "max      100000.000000\n",
      "Name: 问卷编号, dtype: float64\n",
      "count    416.000000\n",
      "mean      24.127404\n",
      "std        6.501946\n",
      "min       10.000000\n",
      "25%       20.000000\n",
      "50%       22.000000\n",
      "75%       26.000000\n",
      "max       60.000000\n",
      "Name: 年龄, dtype: float64\n",
      "count    416.000000\n",
      "mean       0.281250\n",
      "std        0.450151\n",
      "min        0.000000\n",
      "25%        0.000000\n",
      "50%        0.000000\n",
      "75%        1.000000\n",
      "max        1.000000\n",
      "Name: 欢乐聚餐, dtype: float64\n",
      "count    416.000000\n",
      "mean       0.137019\n",
      "std        0.344282\n",
      "min        0.000000\n",
      "25%        0.000000\n",
      "50%        0.000000\n",
      "75%        0.000000\n",
      "max        1.000000\n",
      "Name: 快乐童年, dtype: float64\n",
      "count    416.000000\n",
      "mean       0.293269\n",
      "std        0.455809\n",
      "min        0.000000\n",
      "25%        0.000000\n",
      "50%        0.000000\n",
      "75%        1.000000\n",
      "max        1.000000\n",
      "Name: 都市生活, dtype: float64\n",
      "count    416.000000\n",
      "mean       0.170673\n",
      "std        0.598959\n",
      "min        0.000000\n",
      "25%        0.000000\n",
      "50%        0.000000\n",
      "75%        0.000000\n",
      "max       10.000000\n",
      "Name: 洋溢青春, dtype: float64\n",
      "count    416.000000\n",
      "mean       0.192308\n",
      "std        0.429669\n",
      "min        0.000000\n",
      "25%        0.000000\n",
      "50%        0.000000\n",
      "75%        0.000000\n",
      "max        4.000000\n",
      "Name: 其他感受, dtype: float64\n",
      "count    416.000000\n",
      "mean       0.151442\n",
      "std        0.358911\n",
      "min        0.000000\n",
      "25%        0.000000\n",
      "50%        0.000000\n",
      "75%        0.000000\n",
      "max        1.000000\n",
      "Name: 健康安全, dtype: float64\n",
      "count    416.000000\n",
      "mean       0.572115\n",
      "std        0.495368\n",
      "min        0.000000\n",
      "25%        0.000000\n",
      "50%        1.000000\n",
      "75%        1.000000\n",
      "max        1.000000\n",
      "Name: 快速便捷, dtype: float64\n",
      "count    416.000000\n",
      "mean       0.314904\n",
      "std        0.465037\n",
      "min        0.000000\n",
      "25%        0.000000\n",
      "50%        0.000000\n",
      "75%        1.000000\n",
      "max        1.000000\n",
      "Name: 价格昂贵, dtype: float64\n",
      "count    416.000000\n",
      "mean       0.165865\n",
      "std        0.372408\n",
      "min        0.000000\n",
      "25%        0.000000\n",
      "50%        0.000000\n",
      "75%        0.000000\n",
      "max        1.000000\n",
      "Name: 口感不好, dtype: float64\n",
      "count    416.000000\n",
      "mean       0.163462\n",
      "std        0.370231\n",
      "min        0.000000\n",
      "25%        0.000000\n",
      "50%        0.000000\n",
      "75%        0.000000\n",
      "max        1.000000\n",
      "Name: 品类太少, dtype: float64\n",
      "count    416.000000\n",
      "mean       0.076923\n",
      "std        0.266790\n",
      "min        0.000000\n",
      "25%        0.000000\n",
      "50%        0.000000\n",
      "75%        0.000000\n",
      "max        1.000000\n",
      "Name: 其他评价, dtype: float64\n",
      "count    416.000000\n",
      "mean       0.456731\n",
      "std        0.498724\n",
      "min        0.000000\n",
      "25%        0.000000\n",
      "50%        0.000000\n",
      "75%        1.000000\n",
      "max        1.000000\n",
      "Name: 快速好吃, dtype: float64\n",
      "count    416.000000\n",
      "mean       0.192308\n",
      "std        0.394588\n",
      "min        0.000000\n",
      "25%        0.000000\n",
      "50%        0.000000\n",
      "75%        0.000000\n",
      "max        1.000000\n",
      "Name: 服务好, dtype: float64\n",
      "count    416.000000\n",
      "mean       0.295673\n",
      "std        0.456894\n",
      "min        0.000000\n",
      "25%        0.000000\n",
      "50%        0.000000\n",
      "75%        1.000000\n",
      "max        1.000000\n",
      "Name: 种类多, dtype: float64\n",
      "count    416.000000\n",
      "mean       0.168269\n",
      "std        0.374556\n",
      "min        0.000000\n",
      "25%        0.000000\n",
      "50%        0.000000\n",
      "75%        0.000000\n",
      "max        1.000000\n",
      "Name: 价格便宜, dtype: float64\n",
      "count    416.000000\n",
      "mean       0.086538\n",
      "std        0.281496\n",
      "min        0.000000\n",
      "25%        0.000000\n",
      "50%        0.000000\n",
      "75%        0.000000\n",
      "max        1.000000\n",
      "Name: 其他吸引因素, dtype: float64\n",
      "count    416.000000\n",
      "mean       0.319712\n",
      "std        0.466926\n",
      "min        0.000000\n",
      "25%        0.000000\n",
      "50%        0.000000\n",
      "75%        1.000000\n",
      "max        1.000000\n",
      "Name: 服务态度需改进, dtype: float64\n",
      "count    416.000000\n",
      "mean       0.295673\n",
      "std        0.456894\n",
      "min        0.000000\n",
      "25%        0.000000\n",
      "50%        0.000000\n",
      "75%        1.000000\n",
      "max        1.000000\n",
      "Name: 送餐速度, dtype: float64\n",
      "count    416.000000\n",
      "mean       0.358173\n",
      "std        0.480041\n",
      "min        0.000000\n",
      "25%        0.000000\n",
      "50%        0.000000\n",
      "75%        1.000000\n",
      "max        1.000000\n",
      "Name: 就餐环境, dtype: float64\n",
      "count    416.000000\n",
      "mean       0.391827\n",
      "std        0.488746\n",
      "min        0.000000\n",
      "25%        0.000000\n",
      "50%        0.000000\n",
      "75%        1.000000\n",
      "max        1.000000\n",
      "Name: 产品价格, dtype: float64\n",
      "count    416.000000\n",
      "mean       0.237981\n",
      "std        0.426360\n",
      "min        0.000000\n",
      "25%        0.000000\n",
      "50%        0.000000\n",
      "75%        0.000000\n",
      "max        1.000000\n",
      "Name: 促销活动, dtype: float64\n",
      "count    416.000000\n",
      "mean       0.295673\n",
      "std        0.456894\n",
      "min        0.000000\n",
      "25%        0.000000\n",
      "50%        0.000000\n",
      "75%        1.000000\n",
      "max        1.000000\n",
      "Name: 产品种类, dtype: float64\n",
      "count    416.000000\n",
      "mean       0.045673\n",
      "std        0.209026\n",
      "min        0.000000\n",
      "25%        0.000000\n",
      "50%        0.000000\n",
      "75%        0.000000\n",
      "max        1.000000\n",
      "Name: 其他改进因素, dtype: float64\n"
     ]
    }
   ],
   "source": [
    "### 使用自定义函数对不同类型的数值变量进行描述统计\n",
    "mytools.print_all_int(df5)\n",
    "mytools.print_all_float(df5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "## 逻辑一致性清理\n",
    "### 构造逻辑判断表达式\n",
    "c1 = '德克士企业认知度 == \"一点印象都没有\" and 德克士股票 == \"一定会买\"'\n",
    "### 筛选出满足条件的数据\n",
    "temp = df5.query(c1)[['德克士企业认知度','德克士股票']]\n",
    "### 删除满足上述条件的数据\n",
    "df6 = df5.drop(temp.index)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "c2 = '德克士综合评价 == \"三流\" and 德克士就职意愿 == \"一定想办法到该公司工作\"'\n",
    "temp = df6.query(c2)[['德克士综合评价','德克士就职意愿']]\n",
    "### 删除满足上述条件的数据\n",
    "df7 = df6.drop(temp.index)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 数据清理完毕\n",
    "df = df7.copy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 描述统计\n",
    "## 单变量描述统计\n",
    "### 无序类别变量（定类变量）描述统计，\n",
    "### 可使用频数频率表、众数、柱状图等方式进行描述\n",
    "result = df['性别'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>伙食费</th>\n",
       "      <th>个数</th>\n",
       "      <th>百分比</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>六百到九百</td>\n",
       "      <td>120</td>\n",
       "      <td>31.91</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>九百到一千二</td>\n",
       "      <td>111</td>\n",
       "      <td>29.52</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>一千二以上</td>\n",
       "      <td>77</td>\n",
       "      <td>20.48</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>三百到六百</td>\n",
       "      <td>68</td>\n",
       "      <td>18.09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>总和</td>\n",
       "      <td>376</td>\n",
       "      <td>100.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      伙食费   个数    百分比\n",
       "0   六百到九百  120  31.91\n",
       "1  九百到一千二  111  29.52\n",
       "2   一千二以上   77  20.48\n",
       "3   三百到六百   68  18.09\n",
       "4      总和  376  100.0"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b = pd.DataFrame()\n",
    "b['伙食费'] = df['伙食费'].value_counts().index\n",
    "b['个数'] = df['伙食费'].value_counts().values\n",
    "b['百分比'] = df['伙食费'].value_counts(normalize=True).values * 100\n",
    "b['百分比'] = b['百分比'].apply(lambda x: round(x, 2))\n",
    "total_row = pd.Series({'伙食费':'总和','个数':b['个数'].sum(),'百分比':b['百分比'].sum()}).to_frame().T\n",
    "pd.concat([b,total_row],ignore_index=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>性别</th>\n",
       "      <th>个数</th>\n",
       "      <th>百分比</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>男性</td>\n",
       "      <td>191</td>\n",
       "      <td>50.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>女性</td>\n",
       "      <td>185</td>\n",
       "      <td>49.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>22.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>总和</td>\n",
       "      <td>376</td>\n",
       "      <td>100.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     性别   个数    百分比\n",
       "0    男性  191   50.8\n",
       "1    女性  185   49.2\n",
       "2  22.0    0    0.0\n",
       "3    总和  376  100.0"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mytools.gen_percent_table(df,'性别')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>职业</th>\n",
       "      <th>个数</th>\n",
       "      <th>百分比</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>学生</td>\n",
       "      <td>224</td>\n",
       "      <td>59.57</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>员工</td>\n",
       "      <td>12</td>\n",
       "      <td>3.19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>个体</td>\n",
       "      <td>12</td>\n",
       "      <td>3.19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>自由职业</td>\n",
       "      <td>11</td>\n",
       "      <td>2.93</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>职员</td>\n",
       "      <td>9</td>\n",
       "      <td>2.39</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>打工</td>\n",
       "      <td>7</td>\n",
       "      <td>1.86</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td></td>\n",
       "      <td>7</td>\n",
       "      <td>1.86</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>教师</td>\n",
       "      <td>6</td>\n",
       "      <td>1.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>个体户</td>\n",
       "      <td>6</td>\n",
       "      <td>1.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>服务员</td>\n",
       "      <td>5</td>\n",
       "      <td>1.33</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>老师</td>\n",
       "      <td>5</td>\n",
       "      <td>1.33</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>销售</td>\n",
       "      <td>4</td>\n",
       "      <td>1.06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>工作</td>\n",
       "      <td>3</td>\n",
       "      <td>0.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>保安</td>\n",
       "      <td>3</td>\n",
       "      <td>0.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>白领</td>\n",
       "      <td>3</td>\n",
       "      <td>0.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>自由</td>\n",
       "      <td>3</td>\n",
       "      <td>0.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>工程师</td>\n",
       "      <td>2</td>\n",
       "      <td>0.53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>促销员</td>\n",
       "      <td>2</td>\n",
       "      <td>0.53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>店员</td>\n",
       "      <td>2</td>\n",
       "      <td>0.53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>待业</td>\n",
       "      <td>2</td>\n",
       "      <td>0.53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>经理</td>\n",
       "      <td>2</td>\n",
       "      <td>0.53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>公司职员</td>\n",
       "      <td>2</td>\n",
       "      <td>0.53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>推销员</td>\n",
       "      <td>2</td>\n",
       "      <td>0.53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>银行</td>\n",
       "      <td>2</td>\n",
       "      <td>0.53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>银行职员</td>\n",
       "      <td>2</td>\n",
       "      <td>0.53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>文员</td>\n",
       "      <td>2</td>\n",
       "      <td>0.53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>商人</td>\n",
       "      <td>2</td>\n",
       "      <td>0.53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>工人</td>\n",
       "      <td>2</td>\n",
       "      <td>0.53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>导购</td>\n",
       "      <td>2</td>\n",
       "      <td>0.53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>无</td>\n",
       "      <td>1</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>奶茶店店员</td>\n",
       "      <td>1</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>公务员</td>\n",
       "      <td>1</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>烧烤店店主</td>\n",
       "      <td>1</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>健身教练</td>\n",
       "      <td>1</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>店长</td>\n",
       "      <td>1</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>35</th>\n",
       "      <td>经理人</td>\n",
       "      <td>1</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>36</th>\n",
       "      <td>无业</td>\n",
       "      <td>1</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>37</th>\n",
       "      <td>退休</td>\n",
       "      <td>1</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>媒体</td>\n",
       "      <td>1</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>39</th>\n",
       "      <td>部门主管</td>\n",
       "      <td>1</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>40</th>\n",
       "      <td>服装店店员</td>\n",
       "      <td>1</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>41</th>\n",
       "      <td>幼师</td>\n",
       "      <td>1</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>42</th>\n",
       "      <td>警察</td>\n",
       "      <td>1</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>43</th>\n",
       "      <td>执法</td>\n",
       "      <td>1</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>44</th>\n",
       "      <td>特效师</td>\n",
       "      <td>1</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>45</th>\n",
       "      <td>美甲</td>\n",
       "      <td>1</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>46</th>\n",
       "      <td>农民工</td>\n",
       "      <td>1</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>47</th>\n",
       "      <td>老板</td>\n",
       "      <td>1</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48</th>\n",
       "      <td>护士</td>\n",
       "      <td>1</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>49</th>\n",
       "      <td>司机</td>\n",
       "      <td>1</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50</th>\n",
       "      <td>厨师</td>\n",
       "      <td>1</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>51</th>\n",
       "      <td>数控工程师</td>\n",
       "      <td>1</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>52</th>\n",
       "      <td>物流</td>\n",
       "      <td>1</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>53</th>\n",
       "      <td>银行白领</td>\n",
       "      <td>1</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>54</th>\n",
       "      <td>美容顾问</td>\n",
       "      <td>1</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>55</th>\n",
       "      <td>收银员</td>\n",
       "      <td>1</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>56</th>\n",
       "      <td>公关经理</td>\n",
       "      <td>1</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>57</th>\n",
       "      <td>技师</td>\n",
       "      <td>1</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>58</th>\n",
       "      <td>医生</td>\n",
       "      <td>1</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>59</th>\n",
       "      <td>总和</td>\n",
       "      <td>376</td>\n",
       "      <td>100.1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       职业   个数    百分比\n",
       "0      学生  224  59.57\n",
       "1      员工   12   3.19\n",
       "2      个体   12   3.19\n",
       "3    自由职业   11   2.93\n",
       "4      职员    9   2.39\n",
       "5      打工    7   1.86\n",
       "6            7   1.86\n",
       "7      教师    6    1.6\n",
       "8     个体户    6    1.6\n",
       "9     服务员    5   1.33\n",
       "10     老师    5   1.33\n",
       "11     销售    4   1.06\n",
       "12     工作    3    0.8\n",
       "13     保安    3    0.8\n",
       "14     白领    3    0.8\n",
       "15     自由    3    0.8\n",
       "16    工程师    2   0.53\n",
       "17    促销员    2   0.53\n",
       "18     店员    2   0.53\n",
       "19     待业    2   0.53\n",
       "20     经理    2   0.53\n",
       "21   公司职员    2   0.53\n",
       "22    推销员    2   0.53\n",
       "23     银行    2   0.53\n",
       "24   银行职员    2   0.53\n",
       "25     文员    2   0.53\n",
       "26     商人    2   0.53\n",
       "27     工人    2   0.53\n",
       "28     导购    2   0.53\n",
       "29      无    1   0.27\n",
       "30  奶茶店店员    1   0.27\n",
       "31    公务员    1   0.27\n",
       "32  烧烤店店主    1   0.27\n",
       "33   健身教练    1   0.27\n",
       "34     店长    1   0.27\n",
       "35    经理人    1   0.27\n",
       "36     无业    1   0.27\n",
       "37     退休    1   0.27\n",
       "38     媒体    1   0.27\n",
       "39   部门主管    1   0.27\n",
       "40  服装店店员    1   0.27\n",
       "41     幼师    1   0.27\n",
       "42     警察    1   0.27\n",
       "43     执法    1   0.27\n",
       "44    特效师    1   0.27\n",
       "45     美甲    1   0.27\n",
       "46    农民工    1   0.27\n",
       "47     老板    1   0.27\n",
       "48     护士    1   0.27\n",
       "49     司机    1   0.27\n",
       "50     厨师    1   0.27\n",
       "51  数控工程师    1   0.27\n",
       "52     物流    1   0.27\n",
       "53   银行白领    1   0.27\n",
       "54   美容顾问    1   0.27\n",
       "55    收银员    1   0.27\n",
       "56   公关经理    1   0.27\n",
       "57     技师    1   0.27\n",
       "58     医生    1   0.27\n",
       "59     总和  376  100.1"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mytools.gen_percent_table(df,'职业')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABEQAAANmCAYAAADzRl6QAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/av/WaAAAACXBIWXMAAB7CAAAewgFu0HU+AAB2vElEQVR4nOzdd5hV1b0/4M8MMMPQEbsgirHERI1do0YNook9scUWJTG9aYwt91qixnJji9FoJGqMmlhjjIoFg8au14JiwYoISBClwwwwM+f3h7+ZC2EGQWaYgf2+z3Oe53DW2nt/z3Dq56y9VlmpVCoFAAAAoEDK27oAAAAAgGVNIAIAAAAUjkAEAAAAKByBCAAAAFA4AhEAAACgcAQiAAAAQOEIRAAAAIDCEYgAAAAAhSMQAQAAAApHIAIAAAAUjkAEAAAAKByBCAAAAFA4AhEAAACgcAQiAAAAQOEIRAAAAIDCEYgAAAAAhSMQAQAAAApHIAIAAAAUjkAEAAAAKByBCAAAAFA4yywQ+cEPfpCysrK8++67i+w3ceLE/OAHP0i/fv1SWVmZjTbaKJdccknq6+sXud3zzz+fr33ta+nTp0+qqqryxS9+Mffee28L3gMAAABgRVFWKpVKrX2Q888/PyeffHKSZPTo0VlnnXWa7DdmzJjsuOOOGTdu3MfFlZWlobxvfvObue6665rc7t57781+++2XefPmLbBdWVlZhgwZkm9/+9stfI8AAACA5VmrjxC56KKLcsopp3xiv3nz5mXPPffMuHHj0qdPn/z973/PvHnzMmrUqHzhC1/In//859x8880LbffWW2/lwAMPzLx587L55ptnxIgRqa2tzf33359evXrlpz/9aUaPHt0adw0AAABYTrVaIDJ79uwceuihOf7449O3b99P7H/VVVfl1VdfTVlZWe64447st99+6dChQzbccMPcfvvt6dixY4499tjU1dUtsN0pp5yS2bNnZ7XVVsuwYcOy2Wabpby8PLvvvnt++9vfZvbs2TnppJNa624CAAAAy6FWC0TOOOOM3HTTTdl2223zzDPPfGL/K6+8Mkmy9957Z6eddlqgbcCAAfna176Wf//733niiScab//ggw/yt7/9LUly4oknpk+fPgtsd+ihh2bNNdfMPffck5qamqW9SwAAAMAKotUCkfLy8px11ll57LHHsvrqqy+y75QpU/Lyyy8nSQ4++OAm++y5555JssBEqY8//njjZKsHHXTQQtt07NgxgwYNyuzZs/PII498qvsBAAAArHg6ttaOzzrrrHTq1Gmx+r711luN17fffvsm+2y66aZJklGjRi20Xd++fdOvX79P3G733XdfrHoaNEzu2pyampqMGjUqq622WlZZZZV07Nhqf04AAAAorNra2kyaNClJsskmm6Rz585Lvc9W+wa/uGFIknz00UeN2zS3As2qq66aJAss29uw3QYbbNDsvpvabnE1F7IAAAAAbeOZZ57J1ltvvdT7afVVZhbHnDlzkiQ9evRIhw4dmuzTu3fvJMmECRMW2q6hbXG3AwAAAIqtXZzj0RCCdOnSpdk+FRUVSZLq6uql3m5xjR079hPbv/jFLyb5OKFaY401lvgYAAAAwKJNmDAh22yzTZJklVVWaZF9totApKqqKsn/hRdNKS//eDDL7Nmzl3q7xbU4ywU3WGONNZaoPwAAALDkWmr+znZxykzDaS3vv/9+s32mTJmSJCmVSgttN378+CXaDgAAACi2dhGIrL322kk+Pq3l3//+d5N9Jk6cmCTp1q3bQtuNHj262X03tR0AAABQbO0iEFl55ZUbw41nn322yT5PPfVUkv8LQZJkyy23TJK8/fbbmTp16mJvBwAAABRbuwhEkmTQoEFJkptuuqnJ9mHDhiVJtthii8bb1l133ay33nqpra3NbbfdttA2dXV1GT58+ELbAQAAAMXWbgKRo48+Okly88035/nnn1+gbdSoUbnjjjuSJHvvvXeT25199tmZMWPGAm3XXXdd3n///XTs2DF77LFH6xQOAAAALHfaTSCy4447ZocddkhtbW322muvDB06NHPmzMlDDz2Ur371q5k7d27WW2+97Lvvvgts973vfS+9evXKmDFjsvvuu+ell17KrFmzcvXVV+dHP/pRkuSwww7L6quv3hZ3CwAAAGiH2sWyuw1uvPHGfOlLX8p7772Xvfbaa4G2zp0757rrrkunTp0WuH2VVVbJX/7yl3z961/PU089lc0222yB9nXXXTcXXHBBq9cOAAAALD+W2QiRUqmUUqmUddZZp9k+/fv3z7PPPpujjz46FRUVjbdvs802eeSRR7LDDjs0ud1Xv/rVPPXUU9lll10abysvL89BBx2UJ598MqusskpL3Q0AAABgBVBWKpVK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RE499dQ8+eST2WGHHXL22Wd/Yv+qqqokSceOHVNe3vxgl4a22bNnp1evXotdz6JGpwAAAADLr3ZzysyDDz6Y888/PyuvvHJuuummZucNmV/DaTK1tbWZOHFis/2mTJmSJCmVSi1TLAAAALBcazcjRG644YaUSqV8+OGHi5zM9F//+lfKysqSJNdee226du2aWbNmZfTo0VlttdUW6j9r1qzMmjUrSdKtW7fWKR4AAABYrrSbESKdOnVKZWVls5dOnTolScrKyhpv69ChQ7bccsskybPPPtvkfp966qkkSY8ePdKzZ89lc2cAAACAdq3dBCJDhgxJTU1Ns5cHHnggSfKlL32p8bYjjzwygwYNSpLcdNNNTe532LBhSZIttthi2dwRAAAAoN1rN4HIp3XkkUemvLw8jz/+eO66664F2iZNmpQhQ4YkSfbee++2KA8AAABoh5b7QKR///75xje+kSQ57LDDcuONN6a6ujrPPfdc9thjj0yePDm9evXK4MGD27hSAAAAoL1oN5OqLo3LLrssr776akaMGJEjjjhigbby8vJcddVVWWmlldqoOgAAAKC9WW5GiOyyyy4plUp5+OGHF2rr3bt3Hnvssfz85z9P165dG2/faKONMnTo0Bx00EHLsFIAAACgvSsrlUqlti6iJc2aNSujRo1Kjx49sv7667fqscaNG9e4RPDYsWPTt2/fVj0eAAAAFFFrfP9eIU6ZmV/Xrl0bl+IFAAAAaMpyc8oMAAAAQEsRiAAAAACFIxABAAAACkcgAgAAABSOQAQAAAAoHIEIAAAAUDgCEQAAAKBwBCIAAABA4QhEAAAAgMIRiAAAAACFIxABAAAACkcgAgAAABSOQAQAAAAoHIEIAAAAUDgCEQAAAKBwBCIAAABA4QhEYD7Tp0/PySefnHXXXTfl5eXp0KFDNt5445xxxhmZM2dOW5cHAABACxGIwP83Y8aM7LDDDjn//PPz7rvvZu21106fPn3y2muv5Ve/+lW23377VFdXN7t9XV1d9t5775SVlbVajdOnT8/FF1+cnXfeOb17906XLl2y+eab59xzz82MGTNa7bgAAAArGoEI/H8/+9nP8vLLL+cLX/hCXnvttbz77ruZOHFi/va3v6Vbt2554YUXcs455zS7/Y9//OPcc889rVbfyy+/nE033TQ///nP88gjj2T69OmpqanJiBEj8stf/rKxbgAAAD6ZQASSjBw5Mtdee2169uyZoUOHZqONNkqSlJWV5Wtf+1pOPfXUJMkNN9yw0LZ1dXX5+c9/niuvvLLV6ps+fXr23XffjBkzJmuttVbuuOOO1NTUZPr06bnuuuvSu3fvvPPOO9l9990zffr0VqsDAABgRSEQgSR33HFHOnbsmJ/85CdZY401Fmr/whe+kCR5//33F7j9ww8/zO67756LL744/fr1a7X6rrrqqowePTqdOnXK0KFDs//++6dTp07p1q1bvvnNb+a2225LkowbNy5DhgxptToAAABWFAIRSHLaaadl9uzZ+e///u8m28eNG5ckWX311Re4/Yc//GGGDx+evffeu1VPl2kIPPbdd99suummC7V/+ctfzuc///kkyVNPPdVqdQAAAKwoBCLw/3Xq1CmVlZUL3T5v3rz8/ve/T5Lst99+C7RVVVXlyiuvzD/+8Y9079691Wp78803kyS77LJLs30aRqhMmzat1eoAAABYUXRs6wKgPXv11Vdz3HHH5bnnnkv//v1z+umnL9D+xz/+MZ06dWr1OioqKpJ8HMA0Z9KkSUmSNddcs9XrAQAAWN4ZIQJN+POf/5z11lsvn/vc5/LAAw9kq622yr/+9a/06dNngX7LIgxJknXWWSdJ8sILLzTZPmXKlLzyyitJkq985SvLpCYAAIDlmUAEmlBbW5uZM2c2/nvixIl56aWX2qyeAw88MEly44035p133lmo/fjjj091dXVWX331fO1rX1vW5QEAACx3BCLQhG9961uZOHFinnnmmeyzzz4ZO3Zsvva1r+Xuu+9uk3p+8pOfZOedd87UqVOzxx575IEHHsi0adPy/PPP56ijjsq1116bJDnhhBOanAcFAACABZWVSqVSWxexvBo3blzjRJZjx45N375927giWkOpVMp+++2Xu+66K2uuuWbee++9dOjQYaF+7777btZdd93GbVranDlzctZZZ+Xyyy/P1KlTF2pfd91189prrwlEAACAFU5rfP82QgQ+QVlZWU444YQkyfvvv5/XXnutTeqorKzM2WefnQ8//DCvvvpqnnrqqZx77rmN7RdccIEwBAAAYDFZZQby8Zwhb7zxRjbccMMmR3985jOfabw+ffr0ZVnaQjp06JDPfvazqa2tzTe/+c0kyW677Zavf/3rbVoXAADA8sQIEUiy5ZZb5nOf+1zuuOOOJtvfe++9xuurrbbasiprka655pq88cYbqaioyGWXXdbW5QAAACxXBCKQ5Ktf/WqS5OSTT25yfo7f/e53ST5e/na99dZblqU1aebMmfnVr36VJPnFL36RDTfcsI0rAgAAWL4IRCDJT3/60/Ts2TNvv/12dt555wwfPjzV1dWZNm1aTj/99Nx4441JkjPPPLONK/3YWWedlffffz/rrrtu/vu//7utywEAAFjuCEQgyZprrplbbrklXbt2zUsvvZSBAwema9eu6dWrV84888yUl5fnrLPOypFHHrnUx3rkkUfSuXPndO7cOY888sgSbz9q1KhcfPHFSZLLLrssVVVVS10TAABA0QhE4P/bfffd89JLL+U73/lO+vXrlw4dOmSVVVbJgQcemMcff7zFRmLU19dnzpw5mTNnTurr65d4+5/85CeZN29eDjzwwOy5554tUhOsKOrr61NbW9vWZQAAsBwQiMB8BgwYkKuuuirvvfde5s2blw8++CC33nprtttuu0/cdp111kmpVEqpVFpkv1122aWx3y677LLENQ4bNiylUim33nrrEm8LK6Knn346+++/f/r06ZMOHTqkU6dOWW+99XLWWWelpqamyW3uv//+HHLIIenXr18qKyvTr1+/HH300Rk5cmSL13fZZZelrKxskZfHHnusxY8LAMCiCUQAWG5dd9112WGHHXLnnXempqYm2223XQYMGJB33nknp512WgYOHJg5c+Y09p87d24OO+ywfOUrX8ktt9yScePGpa6uLuPGjct1112XLbbYIpdffnmL1vjUU08lSTp16pTKysomL+Xl3o4BAJY1n8AAWC69+OKL+e53v5u6urocf/zxmThxYp588sm89dZbjUtRP/HEE/nNb37TuM0vf/nL/PWvf015eXlOPvnkTJw4MXPnzs2zzz6bHXfcMbW1tfnxj3+cv/3tby1W59NPP91YS01NTZOXL37xiy12PAAAFk9Z6ZPG99OscePGpV+/fkmSsWPHpm/fvm1cEUBx7LHHHnnggQdy4okn5vzzz1+off/998+dd96ZjTfeOK+88komTJiQtddeO7W1tU1uM2vWrGy11VYZNWpUPv/5z7fI6TMfffRRVl555VRUVGT69OmprKxc6n0CABRRa3z/NkIEgOXOrFmz0qVLl2y99dY57bTTmuyz9dZbJ0nef//9JMmdd96Z2tradOzYMSeffPJC/bt27ZpjjjkmSfLyyy9n5syZS11nw+kym2++uTAEAKCd6djWBQDAkuratWvuuOOORfZpCEK6du2aJHnzzTeTJJtttll69+7d5DYNvzokyfTp09OtW7elqvPJJ59MknzpS19aqv0AANDyjBABYIVTV1eXO++8M0kycODAJElFRUWSpKqqqtntJk2a1Ni3T58+S11HQyDyzjvv5Etf+lJWXnnlVFVVZcMNN8xxxx2XsWPHLvUxAAD4dAQiAKxwrrnmmowfPz5Jcuyxxyb5eGnsJBk5cmRqa2ub3O7RRx9Nkuy6665LfYpLXV1dnnnmmSTJ7bffnldeeSWf+9znssUWW2Ts2LG55JJL8tnPfjYPPfTQUh0HAIBPRyACwAplwoQJjXOEDB48OJtvvnmSZO+9905lZWWmTZuWSy+9dKHtHn744dxyyy1Jkh/84AdLXceIESMyc+bMlJeX56KLLsr777+ff/3rX3n88cczZsyY7L333pk1a1YOOeSQzJgxY6mPBwDAkhGIALDCqK+vzze/+c1Mnjw5/fv3z0UXXdTYttZaa+WSSy5Jkpx00kk577zzMnHixLz33nu54oorsv/++6dUKmXTTTfNvvvuu9S1DBgwIA888ED+9a9/5bjjjltgxMkqq6yS22+/Pf3798+kSZNy3XXXLfXxAABYMgIRAFYYp556ah588MFUVlbm5ptvTq9evRZo//73v5977rknn/vc53LKKadk9dVXT//+/fPDH/4w06ZNS5JccMEFKSsrW+paevfunUGDBmXHHXdssr2ioiJHHnlkkuS+++5b6uMBALBkBCIArBBuvvnmnHPOOUmSK664Ittuu22T/fbcc8+MGDEi48ePzzPPPJPHHnssPXr0SJLss88+GTRo0DKruW/fvkk+nnQVAIBly7K7BbXOyfe0dQmwzL173l5tXQKt5Mknn8zgwYOTfHw6TMP1RVlzzTWz5ppr5swzz8z06dPTuXPnXHzxxS1a19y5c9OpU6dmR5w0rGrTEiNSAABYMkaIALBce+WVV7LPPvukuro6Bx10UM4999zF3vbDDz/MhRdemCQ58cQTs95667VYXcccc0x69+6dp556qtk+DSvMbLDBBi12XAAAFo9ABIDl1ssvv5yBAwfmo48+ys4775zrr79+iUZbnHXWWZk+fXoGDBiQU045pUVrq6ioyOzZs/O73/2uyfZHH320MRD5+te/3qLHBgDgkwlEAFguTZw4MbvttlsmTpyYTTbZJHfeeecCK7l8kpEjR+b3v/99kuTyyy9P586dW7S+n/70p+nUqVP++te/5pJLLkldXV1j2wMPPNC4qs0XvvCFHHrooS16bAAAPplABIDl0gUXXJCJEycmSV577bWsttpq6dy5c5OXRx55ZKHtf/zjH6e2tjYHHXRQvvKVryzyWGPGjGnc1/XXX79Y9W200Ub53e9+l/Ly8hx33HFZY401ss0222TAgAHZY489Mnny5Oywww4ZOnRoOnY0pRcAwLImEAFguTRixIjG67W1tZkzZ06zl/r6+gW2vfHGG/PII4+kR48eueSSSz7xWKVSqXFf84/0+CTf+9738vjjj2e//fbLvHnz8uKLL2bOnDnZf//9c9ttt+WRRx7JGmussdj7AwCg5ZSVSqVSWxexvBo3blz69euXJBk7dmzj8onLA6vMUERWmQEAgOVTa3z/NkIEAAAAKByBCAAAAFA4AhEAAACgcAQiAAAAQOEIRAAAAIDCEYgAAAAAhSMQAQAAAApHIAIAAAAUjkAEAAAAKByBCAAAAFA4AhEAAACgcDq2dQEAfLJ1Tr6nrUuAZe7d8/Zq6xIAgBWYESIAAABA4QhEAAAAgMIRiAAAAACFIxABAAAACkcgAgAAABSOQAQAAAAoHIEIAAAAUDgCEQAAAKBwBCIAAABA4QhEAAAAgMIRiAAAAACFIxABAAAACkcgAgAAABSOQAQAAAAoHIEIAAAAUDgCEQAAAKBwBCIAAABA4QhEAAAAgMIRiAAAAACFIxABAAAACkcgAgAAABSOQAQAAAAoHIEIAAAAUDgCEQAAAKBwBCIAAABA4QhEAAAAgMIRiAAAAACFIxABAAAACkcgAgAAABSOQAQAAAAoHIEIAAAAUDgCEQAAAKBwBCIAAABA4QhEAAAAgMIRiAAAAACFIxABAAAACkcgAgBAm6ivr09tbW1blwFAQQlEAABYZp5++unsv//+6dOnTzp06JBOnTplvfXWy1lnnZWampomt5kxY0ZOPvnkrLfeeqmsrMw666yT008/PXPmzGnx+n7xi1+krKxskZdx48a1+HEBWPY6tnUBAAAUw3XXXZdvf/vbqaurS5cuXbLddtvlgw8+yDvvvJPTTjst9913X4YPH57KysrGbaZMmZKdd945I0eOTJKUlZVlzJgxOfPMM/PYY4/l/vvvT8eOLfeR9qmnnkqSVFRUpKysrMk+zd0OwPLFCBEAAFrdiy++mO9+97upq6vL8ccfn4kTJ+bJJ5/MW2+9lcsuuyxJ8sQTT+Q3v/nNAtsdcsghGTlyZKqqqnLNNdekpqYmY8eOzaBBgzJ8+PBceOGFLVZjbW1tnn/++STJ+PHjU1NT0+RlrbXWarFjAtB2BCIAALS6E088MXPnzs2JJ56YCy64IN26dUvy8WiLH/3oR9lvv/2SJH/9618bt7nnnnsybNiwJMmQIUMyePDgVFRUpG/fvrn11lvTu3fvnHHGGfnoo49apMaXXnop1dXV6d+/f1ZeeeUW2ScA7ZdABACAVjVr1qx06dIlW2+9dU477bQm+2y99dZJkvfff7/xtiuvvDJJsskmm+Twww9foH/Pnj1zzDHHpKamJkOHDm2ROp988skkyXbbbdci+wOgfROIAADQqrp27Zo77rgjzzzzTLp27dpkn4YgZP72Rx99NEly8MEHN7nNnnvumSS59957W6TOhkDkS1/6UovsD4D2TSACAECbqqury5133pkkGThwYJJk0qRJmTZtWpJk++23b3K7TTfdNEkyatSoFqmjIRB55plnss0226R3797p1q1bNt1005x66qmZPHlyixwHgPZBIAIAQJu65pprMn78+CTJsccemyQLzAuywQYbNLndSiutlI4dO+bdd99d6homTpyYd955J8nHq+GMHTs2m2++eTbeeOOMGjUqZ599djbccMO88sorS30sANoHgQgAAG1mwoQJOfnkk5MkgwcPzuabb54kmTNnTmOf3r17N7t9r169MmXKlAX6fxqPPfZYkqSqqirXX399xo0bl+HDh+eZZ57Jm2++mW222SYffvhhDjnkkNTX1y/VsQBoHwQiAAC0ifr6+nzzm9/M5MmT079//1x00UWNbR06dGi83qVLl2b3UVFRkSSprq5eqlp22GGHDB06NI8//niOOOKIBY7fv3//3HPPPenevXteeeWVFpvEFYC2JRABAKBNnHrqqXnwwQdTWVmZm2++Ob169Wpsq6qqSpJ07Ngx5eXNf2RtaJs9e/ZS1bL66qvnq1/9auMIlf+08sorNy4NfN999y3VsQBoHwQiAAAsczfffHPOOeecJMkVV1yRbbfddoH2htNkamtrM3HixGb3M2XKlCRJqVRqpUr/T9++fZOkca4RAJZvAhEAAJapJ598MoMHD06SnHTSSY3X57fSSis1LsE7evToJvcza9aszJo1K0nSrVu3pa6rpqZmke2TJk1KkpSVlS31sQBoewIRAACWmVdeeSX77LNPqqurc9BBB+Xcc89ttu+WW26ZJHn22WebbH/qqaeSJD169EjPnj2Xqq6vfvWr6d27d+NqN015+OGHkzS/6g0AyxeBCAAAy8TLL7+cgQMH5qOPPsrOO++c66+/fpGjLQYNGpQkuemmm5psHzZsWJJkiy22WOraysrKUlNTk8svv7zJ9htuuCFvv/12kuTrX//6Uh8PgLYnEAEAoNVNnDgxu+22WyZOnJhNNtkkd955ZyorKxe5zZFHHpny8vI8/vjjueuuuxZomzRpUoYMGZIk2XvvvZe6vuOPPz5JcuGFF+bmm29eoO2GG27Id77zncZj7bTTTkt9PADankAEAIBWd8EFFzROjvraa69ltdVWS+fOnZu8PPLII0k+Xu72G9/4RpLksMMOy4033pjq6uo899xz2WOPPTJ58uT06tVroTlIHnnkkYX29UkGDhyYX/7yl5k7d26+8Y1vpG/fvtl2222z1lpr5cgjj0xNTU323Xff/OUvf2nBvwoAbUkgAgBAqxsxYkTj9dra2syZM6fZS319fWPfyy67LF/4whcyc+bMHHHEEenSpUu22mqrvPDCCykvL89VV12VlVZaaYFj1dfXN7mvT/LrX/869957b3bbbbdMnTo1L730Ujp16pRDDz00DzzwQO6888507959qf8WsLz6wQ9+kLKysrz77rvN9imVSvnDH/6Q7bbbLj169EhVVVUGDBiQr33ta3nooYdatb7XXnstK620Uo4++uhWPQ4rjo5tXQAAACu+hvk+llTv3r3z2GOP5bTTTssf/vCHxlVlNtpoo1xyySXZY489Ftpml112+dTL8H7lK1/JV77ylU+1LazIzj///Fx55ZWL7FMqlXLEEUc0jqRqmCNo9OjRGT16dP7+97/nv/7rv3L22We3eH0TJ07Mnnvu2bgUNywOI0QAAGjXunbtmgsvvDATJ07Ms88+mzfeeCOvvfZak2EI0PIuuuiinHLKKZ/Y75prrslf/vKXrL322hk2bFhmzZqVmpqajBw5MkcddVSSj0diPfbYYy1a37vvvpvdd999kSNXoCkCEQAAlgtdu3bNlltumfXXX7+tS4FCmD17dg499NAcf/zx6du37yf2v+GGG5IkF198cXbbbbdUVVWloqIin//85/OnP/0pm2++eZIsNEny0hg2bFi22mqrvPTSS+nXr1+L7ZdiEIgAAACwkDPOOCM33XRTtt122zzzzDOf2H/8+PFJ0mxoufbaaydJqqurW6S+GTNm5Ktf/WqmT5+eq666Kt/61rdaZL8Uh0AEAACAhZSXl+ess87KY489ltVXX/0T+6+11lpJkqFDhy7UNmXKlDz++ONJki233LJF6qurq8vmm2+eZ599tnFpbFgS7X5S1fr6+tTX16djx3ZfKgAAwArjrLPOSqdOnRa7/3e/+908/PDD+dWvfpUuXbrkgAMOSI8ePfLiiy/mF7/4RT788MNssMEGOeigg1qkvh49euSpp55Khw4dWmR/FE+7HCHy9NNPZ//990+fPn3SoUOHdOrUKeutt17OOuus1NTUNLnNjBkzcvLJJ2e99dZLZWVl1llnnZx++umZM2fOMq4eAABg+bckYUiSHHroobnyyivToUOH/PSnP81aa62V7t27Z8cdd8xTTz2Vr371q3n44YfTpUuXFqmvvLxcGMJSaXfDLq677rp8+9vfTl1dXbp06ZLtttsuH3zwQd55552cdtppue+++zJ8+PBUVlY2bjNlypTsvPPOGTlyZJKPl3caM2ZMzjzzzDz22GO5//77jTABAABoRaVSKVOmTMm8efMWaisvL0+nTp0yceLErLHGGm1QHSysXY0QefHFF/Pd7343dXV1Of744zNx4sQ8+eSTeeutt3LZZZclSZ544on85je/WWC7Qw45JCNHjkxVVVWuueaa1NTUZOzYsRk0aFCGDx+eCy+8sC3uDgAAQGGcffbZOeWUUzJnzpx06NAhX/jCF7LddtulV69eqa+vzz/+8Y9st912efTRR9u6VEjSzgKRE088MXPnzs2JJ56YCy64IN26dUvy8YiPH/3oR9lvv/2SJH/9618bt7nnnnsybNiwJMmQIUMyePDgVFRUpG/fvrn11lvTu3fvnHHGGfnoo4+W/R0CAAAogEmTJuXss89Okuywww5566238sILL+TJJ5/M2LFjc/rpp6esrCxz5szJCSec0MbVwsfazXkks2bNSpcuXbL11lvntNNOa7LP1ltvnTvvvDPvv/9+421XXnllkmSTTTbJ4YcfvkD/nj175phjjslvfvObDB06NEceeWTr3QEAgP9vnZPvaesSYJl797y92roE2tDQoUMzd+7c9O7dO3//+9+z8sorN7Z169YtZ5xxRmpqanL++efn6aefztSpU9OrV6+2KxjSjkaIdO3aNXfccUeeeeaZdO3atck+DUHI/O0Nw60OPvjgJrfZc889kyT33ntvS5YLAADA/zd+/PgkH48OmT8Mmd/8q8tMmDBhmdQFi9JuRoh8krq6utx5551JkoEDByb5eFjWtGnTkiTbb799k9ttuummSZJRo0Yt8THHjRu3yHZPYgAAgP/70bqioqLZPmVlZY3Xe/fu3eo1wSdZbgKRa665pjF1PPbYY5NkgXlBNthggya3W2mlldKxY8e8++67S3zMfv36LfE2AAAARbPxxhsnSePKn015+OGHkyQDBgzI6quvvizKgkVqN6fMLMqECRNy8sknJ0kGDx6czTffPEkyZ86cxj6LShh79eqVKVOmLNAfAACAlrHrrrumf//+efPNN3Prrbcu1P7mm2/m17/+dZLk5z//+bIuD5rU7keI1NfX55vf/GYmT56c/v3756KLLmps69ChQ+P1Ll26NLuPhmFb1dXVqaysXOxjjx07dpHtEyZMyDbbbLPY+wMAAFgRdezYMTfffHP22muvHHroobnhhhuyxRZbpKysLC+//HLuvPPOzJ07NwceeGB++MMfLrDtI488kt133z1J8sADD+RLX/pSW9wFCqjdByKnnnpqHnzwwVRWVubmm29eYCbiqqqqJB8/+crLmx/s0tA2e/bsJZrJuG/fvp+qZgAAgKLZdtttM3LkyFx66aW577778tBDD6W6ujo9e/bMF7/4xRx55JE5+uijF5hLJPn4R/CG0fz19fVtUToF1a4DkZtvvjnnnHNOkuSKK67Itttuu0B7w2kytbW1mThxYlZbbbUm9zNlypQkSalUasVqAQAAVlyL831qjTXWyLnnnptzzz13sfe7yy67tMh3tTPOOCNnnHHGUu+H4mi3c4g8+eSTGTx4cJLkpJNOarw+v5VWWqlxNuPRo0c3uZ9Zs2Zl1qxZST5e/xoAAACgXQYir7zySvbZZ59UV1fnoIMOWmS6uOWWWyZJnn322Sbbn3rqqSRJjx490rNn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KunYcbn/c9KKJkyYkG222SbJx4nmGmus0cYVAYviOQvLF89ZWP543rIkamtrM2nSpCTJJpts0iL7XO6/wTecLpOkyQlVG5SXfzwYZvbs2Yu97759+35in8985jOLvT9osMYaayzW4wtoHzxnYfniOQvLH89bFsc666zTovtb7k+Z6dChQ7p3754kGT9+fLP9pkyZkiRZzqdMAQAAAFrAch+IJMnaa6+dJBk9enSzfSZOnJgk6dat2zKpCQAAAGi/VohAZMstt0ySPPvss022v/322/nww4+X0WoITwAAAIDiWiECkUGDBiVJbrvtttTV1S3UPmzYsCQfn2+0qJVoAAAAgGJYIQKRr33ta+nRo0fGjBmT3//+9wu01dTU5KKLLkqS7L333m1RHgAAANDOrBCBSNeuXfPjH/84SfLzn/88v/3tbzNjxoy8/vrr2XvvvfPmm2+mY8eO+clPftLGlQIAAADtwQoRiCTJaaedlt133z21tbU59thj06NHj2y00Ub55z//mSQ577zzssEGG7RxlQAAAEB7UFZagdahra2tzfnnn5+LLrookydPTpL07ds35513Xg4//PA2rg4AAABoL1aoQKTBnDlz8tprr6WioiKf/exnU1ZW1tYlAQAAAO3IChmIAAAAACzKCjOHCAAAAMDiEogAAAAAhSMQAQAAAApHIAIAAAAUjkAEAAAAKByBCAAAAFA4AhEAAACgcDq2dQEwv5kzZ6Zbt25tXUabeuyxx/Lggw+mQ4cOOfXUU5do2/POOy+rrrpqVlllleyzzz6tVCErkvfeey+33HJLVl111Wy44YbZdttt27qkNrU0z7/2qL6+PnfffXfWXXfdbLLJJm1dDjSaNWtWbrjhhhxxxBHp2rVrW5fTrs2cOTMffvhhkqRfv37p0KFDG1cEy15LvD/7nkFTjBChXSiVSrn88sszYMCAvPXWW596P9XV1Zk0aVKmT5+empqalEqlFqmvrq4us2bNyowZMxY63qxZs1JXV7dENdbW1jbb/sILL+RXv/pVLrvssiWu8ze/+U2+/e1v51e/+tUSb/uf6urqMnHixEydOjXV1dVLdB8Xpb6+PjU1NZk6dWqL7I+lM23atJxwwgk56qijcuutty7Vvor+/GsvqqurM3z48Bx//PFZd911s99+++UXv/hFW5cF+fDDD3P77bfnm9/8ZtZaa618//vfz6WXXtrWZS222trafPe7383NN9/8iX1fffXV3HjjjXnnnXeW+rh33HFH1l133ay77rqNwQgsCe/PycMPP5yNNtoot9xyy6favoHPxysegQjtwmuvvZbjjjsukyZNykEHHZSamppPtZ+bb745q666anr27JmqqqqUl5enrKxsqS8dO3ZMt27dcsoppyxwvF//+tfp1q1bOnbsmIqKinTu3LnZS0VFRcrLy9OlS5c89thjzd6Hzp07J0lWWmmlJb7/lZWVSZK11157ibf9T2PHjs3qq6+e3r17p0uXLunYsWOL/C07dOiQqqqq7LjjjktdI0uv4TGTLP3jpujPv2Wprq4u77//fv73f/83t9xyS84777wcffTR2XLLLdOrV68MHDgwF110Ud57770kyQMPPJCrr766jaumCObMmZN33303jz76aK677rqcfvrpOfDAA7Phhhtm1VVXzYEHHpjrr78+06ZNS5KcddZZefnll9u46sXzi1/8IkOGDMlRRx2VRx99dJF9X3311RxxxBFZb731ctxxxy3VcecfQdPwGsWKo76+PpMmTcqsWbNSW1v7qcKKUqmUefPmZcaMGZkyZcpC7UV/f547d26+/e1vZ/z48TnmmGPy5ptvLvE+Gvh8vOJxygztwsYbb5zzzjsvxx9/fEaMGJHjjz8+l19++RLvp6KiIn369EmXLl3SqVOnxhepprz77ruZM2dOVllllUW+uNbV1aWuri7V1dWpqqpaoK28vDyVlZXp3Llzqqqq0qFDh8yYMSMdOnRIly5dFug7d+7c1NTUpKamptmakqRjx4+flvN/UV1Sq6666qfetkF5eXl69+6dqqqqdO7cOR06dEh5edMZ6gcffJApU6aka9eu6du3b7P7rK+vT11dXebOnZuePXsudY20rKV93Hj+tbz77rsvt99+e6ZOnZopU6Zk0qRJ+eCDDzJp0qQmf5UqLy/POuusk4033jgbb7xxNtpoo6y//vrp379/uw95WL5ceumleeGFFzJ16tRMnjy58XE5efLkJr/QVVZW5vOf/3w++9nPZuONN86GG26Y9ddfP2uuuWb69OnTBvegeaVSKXPmzEmSxi9rSXLqqafm7rvvzttvv52vf/3reeaZZ7Luuus2u48G22yzzVLVU1FR0XhdILLi+eCDD7LGGmu02P4GDhyYBx98cIHbiv7+XFFRkb/85S/ZaaedMmPGjBx88MF55pln0qlTpyXel8/HK6AStBP19fWlr3zlK6UkpbKystLDDz/caseqq6sr9erVq5Sk9OCDD7bovvfYY4/S6quvXvrHP/7xiX3XXnvtUpLS7373u8bbrr322lKS0pZbbrnEx1511VVLSUqnnHLKEm+7NPbZZ59SktJ///d/L9PjsvReffXVUpJSktL999+/TI65oj7/WsP06dNLq6yySuP/UcOla9eupQ033LC0xx57lHbfffdSklLfvn1L1dXVbV1yqVQqlaqrq0uTJk1q6zJoRU8++eRCj8skpZVWWqm02Wablfbbb7/SZpttVkpSOvjgg0u1tbVtXXKpVCqVZs6cWZoyZcoi+4wZM6bx/txxxx0LtL322mulHj16lJKUNt1009KsWbOa3Mc111zTuI+XX355qWq+9957G/fFimfChAlNPpc+7WXgwIGfupYV/f353HPPbfw7/epXv/rU+1lcPh8vH4wQod0oKyvL7373u3zuc5/L3Llz853vfCcvvfRSq/wa8uKLL2bq1KlZY401suuuu7bYfkeNGpUHHnggpVIpp5xySnbdddd069at8RzLHj16LNC/e/fuSZLVVlutRY7f8IvWfx6nNdXX1zcOHT7ssMOW2XFpGQ2PmWTZPW5W1Odfa+jevXt+//vfZ+LEiVlnnXWy9tprp2/fvundu3djn7vvvjsPPPBAOnTo0CKvl/369cv06dM/8ZevpsyePTszZsxIbW1tunbtmpkzZy51PbRP2223XS688ML07Nkz66yzTvr165d+/fot8EvxL37xi7z44ouNvxAvjddffz2bbrppunTpksrKynTo0GGRvybPr76+PrNmzcrMmTNTX1+fvfbaK3fffXez/ec/ReU/J2DcaKON8uc//zlf+9rX8tJLL+V73/terr/++oX20TCnQllZWdZbb73FqpNiWmWVVfLmm282jqiorKxcotfd5P9GGFRXVy9VLSv6+/Pxxx+fP/3pT3n99dfz61//OgceeGA23njjFj1GA5+Plx8CEdqVz3zmMzn22GNz5ZVX5rvf/W6rzaR+zz33JEkOOuigJX7TWZQTTjghpVIpn/nMZ/Lwww+nW7dueeaZZ/K9730va6yxRoYOHbpA/4bhfy0143XDG2HDG0ny8Rfe6dOnL3BZd911W2SekSR54oknMnXq1Gy66ab57Gc/2yL7ZNmZ/8PT/I+b2bNnL/S42WabbVrksbqiPv9ay4EHHrhMjzdv3rzG/3NYlJ///OfL7FilUilz587N3LlzW/1Y85+i0vA6Mb/99tsvJ598cs4999zccMMN+fKXv5zBgwcv0GfSpElJktVXX91pLixShw4d8pnPfKZF9jV/WP5prOjvz506dcrFF1+cvffeO0cffXRWWWWVFt3//Hw+Xn4IRFgmXnzxxXTp0iXdu3dP9+7d06VLl2Z/2Tn11FNz/PHHL3I+g/r6+syZM6dx8qgNN9xwieq5/fbbk7TsF42//OUvufvuu9O9e/fcddddWXnllZMkL730UkaMGJERI0bk8ssvz49+9KPGbRpe8JfkHMahQ4fm9ddfT3V1dWbOnJnp06dnypQpmTx5cuMHxdNPPz1nnHFGpk+f3uSHxz/96U856qijlubuNmqNvyUt76qrrsqMGTMaf8FveNyMHj26sc+gQYNSU1OT6dOnNzk/xbvvvtsiH06W5+dfERxxxBGZO3du4wiRJQmmG84pnzNnTovNvA9J0qtXr3znO99J165dG+f1+DSPzdmzZ2eDDTZYZN/FeU0488wz889//jPPPPNMfvKTn2S33XZLv379GtsnTpyYJFlrrbUWu0Zoa8vr+/Nbb72V2tradO/ePd26dUu3bt2afX346le/mjfffDMDBgxodn8NAezs2bMzceLEDBgwYIGgdHH4fLwcabuzdSiSysrKFj0/cv5L//79mzzmLbfcsszOxXzyySdLXbt2LSUp3XLLLQu177XXXqUkpaqqqtJrr73WePuWW25ZSlIaNmxY422fdI7kD3/4w8WuvVOnTqU+ffqUBgwYUNpkk02aPSf6k3zwwQct8rfs0KHDEh2XlrPxxhsv9v9T586dS6uuumpp/fXXLw0YMKDx9k86735+K+rzrz266667FvlaCG3l+OOPLyUpHXXUUW1dyhKprq5ufA166KGHmu33yiuvlKqqqkoXXnjhQm177rlnKUlpv/32W+p65p9DpLq6usnLrFmzSlOmTCn9+9//Lo0ZM6bZuU1gRXx/3mOPPVrkPjV3GT16dJP3z+fjFYMRIqywGs4B7ty5c/r377/E20+ZMiUffPDBImeznjZtWq666qqcfvrpqa6uzimnnJKDDjqosb26ujpTp07N8ccfn2HDhqW6ujqHH354nnzyySVOmhvsuuuumTJlStZcc82svvrq6dOnT/r06ZOpU6c2jvoYOnRodt555wVm8h4/fnzjDNe9evVaomPOfz71BhtssNjnbTdoWIaxvazcUUQHHXRQxowZkzXWWCOrrbZa+vTpk969e2f48OG56KKL0rlz54wZMya9evVa4LF544035ogjjkhZWdkSzTGyoj7/ABpsvPHGeeutt7Lmmmsu1NYw+m6dddZp0WP+52oezbnrrruy9957t+ixWTF4f245Ph+vGAQiLBMvv/xyOnXqlIqKisbLkr5ozK9UKqW2tjZz585dYFLI+TUMs/vc5z6XZ599domPcckll+S4445b5IvU5Zdfnv/6r/9q/Pd9992XW2+9NdOnT8+0adOarO3555/PqaeemvPPP3+Ja0o+HnrX1PC7f/zjH43Xt9pqq4WWNZs2bVrj9SVd0mv+IYvPPffcEp82MWLEiGy++eZe8NvQGWec0eTt//znP5MkAwYMaPI0tYbHTffu3ZfofOIV9fkHML+mwpBSqZQxY8YkSbPL8kJbWRHfn6+++urMnTu38TvGp5mY9j/V1tamtrY2M2fObHbJXJ+PVwwCEZaJlposakk0NRHap7GopHr33Xdf4AX/hRdeWKB9jTXWyIABA9KvX7+su+66ufvuuzNy5Mi8+OKLqa2tbZH6Grz66qtJPg47mpokav4JEpd0hMiy+FvSNhoeN+uvv36T7Q2Pm/b4mFmWz7/HHnss++yzTzp16rTAZWkmfm5YFWDevHmprq7OL3/5yxx33HFJkpqamsyaNStdunRJRUVFi0ww3TD3UsNl1VVXXapgmvbj3HPPzW9+85vGx2VFRUU6deq0VP+/dXV1jY+Z6urq3Hfffdl6660zffr01NfXp6qqKp06dWqRiRfr6upSU1OTOXPmpFQqpU+fPku9z7b0xhtvZPbs2Uk+XpWmJc2bN6/J2+f/kWju3LlZaaWVWvS4tL733nsv7733Xjp37pzOnTsv9vtobW1tampqUltbm+222+4T+69o789J687V0zDnSVN8Pl4xCERocxMmTMgaa6zRbHtNTU3efffdJf5Q0VIf9Bf1YrfJJpvkggsuyMYbb5wBAwZk5ZVXTs+ePdO3b99MnDgx//M//5Mjjjiisf++++6b1157baHZ6FvCc889lyTZcsstm2xfmhEiy+JvybJXKpXy/PPPJ/nkx017fMwsy+dfbW1tpk6d+mnuwmKb/xezv//97zn00EOXaPsxY8Ys0d99xowZ7X6FHRbPnDlzMmXKlFY9RsMkuSeeeGL+8Ic/LNG21113Xa677rrF6rvlllt+ql+t25P//d//bby+1VZbtei+m3tN7Nixo9VslnN/+ctfcsopp3zq7ddaa62MGzfuE/utaO/Pn2TixImf+APAiBEj8oUvfGGJ9+3z8YrBX582VVdXl+222y577bVXzj777IV+0Xj77bdz4IEHZurUqXnppZcWWBa0PaisrMzxxx+/2P232267xUrvl1R9fX0eeuihxmM0ZWkCEVZML730UuPSkJ/0uGmPj5ll+fwrKytLhw4dFhohsjQfYhpWvWgYITL/B6uOHTume/fuqaysbLw098Fr9uzZmTBhQjp27LjI88EbTjWsqanJ7NmzjQ5ZgZSVlaVjx44LjRD5tKM3SqXSQiNEGh4vFRUV6dmzZ+PjclG/bH700UeZOnVqunfvvsiV4xqeC9XV1Qud7tkejR49epGnwjz88MNJPp5TYHkf7cKyU1ZWloqKinTu3DlVVVWL9f4y/+t6e1oxrb18Pk6S4447LhMmTMgVV1yx0I+rM2fOzHe+853cfvvteeqpp7LFFlu0Sg20bwIR2tSNN96Y9957L1dccUUeeuihvPzyywsMDT///PMzYsSIJMmPf/zjxf6FaX4vv/zypzplZ/4Aob174YUX8tFHHyVJvvzlLzfZp+H+LGopssWx2WabLfEXqaaW/qXtPfjgg0k+nljti1/8YpN9Gh43S3rKTIMV5fm38847t/hpbovS3FxBTbn77ruzzz77ZK211spbb73VypXRHp1++uk5/fTTl8mxLr300lx66aWL1fcXv/hFLrzwwnz961/Pn/70p9YtbBl5/fXXs9NOO+X0009fYJnQBjU1NbntttuSxKSmLJGTTjopJ5100jI73ory/rwo77zzTm699dbU1tZms802y+uvv77ARMf/+Mc/ctNNNyVJDj/88Dz33HOfOpT1+Xj5JRChzcyePXuB8wsvvPDChb6oX3zxxXn88cfz6quv5s9//nP22GOPHHbYYUt0nDlz5uTtt99ukZr/0/Tp03PppZemW7duC8wnUF1dnSQZPnx4Zs6cmeT/zvHcZJNNsscee7RoHTfeeGOSj7+07rzzzk32aalf+t95552l2p72o+FxM3DgwAVmSp/f0j5uivD8A4rhvffey6BBgzJp0qQcd9xxGThw4EK/ON96662Nr5uLG2pCWyjC+/MJJ5zQ+GPGscceu9CqT4cddlgeeOCBXHfddRk1alSOPfbYXHXVVZ/qWD4fL78EIrSZ0047rfFcx+9973vZc889F+rTtWvX3H777dl6660zc+bMfP/738/WW2/d7ASQTfm05yM3zKK9KNOnT8+pp57abPu1116ba6+9doHbfvaznzW+4JdKpSWu6z/NnTs3119/fZJk//33b3aIZUsFIp9m3oGGWbRpP55//vnGSc7mXwrvPy3t42ZFf/4BxTB+/PgMGjQoY8eOTadOnXLppZcuFIZUV1fnv//7v5MkX/jCF7L99tu3RamwWFb09+e77747f/vb35Ikm266ac4666wm+11xxRV54YUX8tJLL2XIkCEZOHBgDjnkkCU+ns/Hyy+BCG3iiSeeyCWXXJLk4xVoLrzwwmb7brTRRrniiity5JFHZsaMGTnooIPy9NNPt4slqrp3757TTjstq6++eqqqqhrP8//+97+fadOm5Uc/+lF23HHH1NfXZ+rUqfnoo4+y2WabNW7fkFovzVD8q6++Oh9++GGS5Pvf/36z/T7taiGsmBqWtVtppZVy8MEHN9uvPT9u2sPzD1jxjR49OgMHDszo0aPTs2fP/P3vf88uu+yyUL+zzz477733XpKPXzvHjx/fqqtfQHvV1u/PH330UeNn4srKytxwww3NzndUVVWVm2++OVtttVVmzZqVY445JltsscUS/fjK8k0gwjL34Ycf5pBDDkldXV06dOiQP//5z80O129wxBFHZNiwYfnzn/+cF198MSeddFJjoNKWevbsmV/96lcL3X7sscdm2rRp2W677fKNb3yj2e0bls/7tOcQTps2rfG88e222y7bbrvtIvs21Pyfnn766WyzzTYmWSyIJ554IrfcckuS5Lvf/W6qqqqa7dvc42bevHl56aWXml2dZllo6+cfsOJ7/fXXc8QRR2T8+PFZc801c99992WTTTZZqN8tt9ySc889t/Hf77zzTnbZZZc8/PDDQhEKpy3fn0ulUo488siMHz8+SXLWWWc1+Zyd30YbbZTf/e53+da3vpWZM2fmsMMOy5NPPmn1l4JY+sXjYQnU19fn8MMPbzxV5uSTT17sIaWXX35546zul156aeOqKsuzefPmpbKysvGcyiX1s5/9rHGVkPPOO2+RfRc1Oebhhx+e9ddf/xP3wfJv9uzZOeaYY5IkvXv3zoknnrjI/s09biZOnJitttoq22+/fe66665WqbW1Le3zD1gxzT9c/0c/+lHGjx+fddddN48//niTX6zuvvvuHHXUUSmVStluu+3y5z//OZ06dcpbb72VL3/5y5k4ceKyLB+We0vz/vzrX/869957b5Jkp512WuzVbgYPHtw478+zzz6bs88+e4mPzfJJ7MUy9ctf/jIPPPBAkmSLLbZYolnxu3XrlquvvjoDBw5MqVTKMccck5EjRy4XS/QlHw/fGzVqVEaNGtVY/5tvvvmp9/fnP/+5cdWdAw44oNnJVBssaoTIhAkTMnv27MY5JVhx/fjHP85rr72WJDnzzDPTu3fvZvuWSqXGU2b+83Hz/vvvJ0meeuqpxoCzPWvp59+K5qKLLsro0aNTVVWVDh06LNVKVA3mzZuXefPmZfr06SkrK8uQIUNaoFKK5vvf/34qKyvTuXPndOjQ4VMvJTy/uXPnZu7cuZk8eXK22GKLHHvssQu0jx49uvF6XV1dNthgg/zzn/9M3759F9rXb3/72xx//PGpq6vLNttsk/vvvz89evRIr169csABB+SNN97IoEGD8vDDD2ellVZa6tphRdOS78/33HNP43eLHj165Lrrrlui14zf//73+de//pVJkyblnHPOyQEHHPCJo0tY/glEWGbOPffcxnkLunXrlptuummJ10zfdddd84Mf/CC///3v88477+S0007LBRdc0GTfhl94lnZZsfr6+k/sW1tbm0mTJuX999/Pe++915hoX3755bn88svzxhtvZPLkyY39jz766MZf6f/T4hzvX//6V77zne8kSdZYY41ceeWVi31//nPulffffz+zZ89OkgXO35zf/L+WLc2yYotz32g95513XuMkZrvvvnuTS0bOb+bMmY3/Z//5uJl/edemHjcr8vNvRTR06ND885//bLX99+/fv9X2zYrtj3/8Y+rq6lpt/019WZp/sscNN9wwDz/8cFZfffUF+owbNy7f+c53ct999yX5eLWu22+/PT169EiS7LPPPrn++utz2GGHZeTIkdlnn33y4IMPLnCK4syZM1NTU5PKyspUVlY2O8fBkqqrq8u8efMye/bsVFVVLfK0SNrOv//977z55psL/P8v7anLDT9kTJ06NVOnTs3BBx+80D5X1Pfn4cOH58ADD2zsd+WVVzaOLF9cq6yySi6//PIcfPDBmTdvXo455pg8+eSTzYYqPh+vGAQiLBO//e1v88tf/rLx33/84x8/9WRFv/71r3Prrbdm0qRJ+e1vf5uf/vSnWXvttRfq13D+4dIuK9bcB7FSqZTNNtss7733XqZPn97kjNhPPfVU4/WVV14566+/fjbYYIMceeSRzR6vYUK25j4Y3X///TnwwAMzd+7cdOrUKTfeeGNWXnnlT7wfnTt3TpLce++9OfTQQ9OzZ8/U1tYuEKY0d/pSw98yWbplxVrzQy2L9utf/7px9YN+/frlT3/60ye+cTdMglYqlXL99ddnwIABqaioyMyZM3PFFVc09tliiy0W2nZFff61Rw1/o6WZC6VDhw7p2rXrAiNElvaDeV1dXerq6jJnzhznYRdUSzw2O3XqlC5dujSOEGmJ0UsNj83Zs2c3+UWn4RTB9dZbL8OHD18gDPnwww9zwQUX5LLLLsusWbOSfDzy7uKLL17ocX7IIYdk4sSJ+dnPfpYnnngihx9+eG6//fbG59Zll12WU045ZYlqX9Ln5fXXX58jjjhiibZh2bjvvvsyePDgVj3GAQccsNDjckV8f37iiSey7777pqamJsnHI8sOPfTQJbo/DQ466KAMGjQow4YNyzPPPJObb7652X35fLxi8AmFVlcqlTJq1KjGf59yyimfajmrBr169co555yTc889N9ddd12TYUjyfx/AlnZZsYYX1/9UVlaWddZZJyNHjmy8rby8PAMGDMjnPve5bLTRRo2XDTfcsNlTE0qlUn71q19l+vTp+eijj3LHHXckSVZdddWF+p5++uk555xzGmfdvvrqq7Prrrsu1v3ZZptt8sQTT+SNN97Idtttt1B7nz59suOOOza57fwfZpdmWbHm/pa0npkzZ+aII47InXfemeTjU1+GDh2aNdZY4xO3raioyGabbZYRI0bkb3/7W+PydfPbfffdG8O2+a2Iz7/2qiW+dN5///0tVQ40aonHZlvM8fNf//Vf6dKlSw444ICsueaaSZKHHnoo11xzTf72t781jqrs06dPLr300hx22GHN7uunP/1pXnnllVx11VW54447ct111+Xoo49eFneDdq6srCyVlZXp0qVLOnXqtMSjpptTW1ubOXPmNAZ2/2lFfH9+/fXXG19vdt555/z2t79d4vs1v9/+9rf54he/mN/85jeLnPzV5+MVg0CEVldWVpYrrrgiO+20U5544on8+te/Xup9futb38pBBx3U5HwYDVpq5YiGDz5NOeCAA1JVVZWddtopW221VTbddNMlntOkrKws77///kLn1++///4L9R04cGAuv/zyTJkyJZdffvkik/T/9F//9V9544038tBDDy3wAbNDhw6NSx8392a8LP6WtI5u3bplt912y1133ZWePXvm3nvvzec///nF3n7IkCE55phj8vLLLy/wC0ZlZWW22WabZpfMXhGff+1Vwwcpq+XQ3izPj83jjjtugX9Pnjw5N954Y+Ov3QcddFB+97vfZbXVVvvEfV166aX53//93wwaNGiB9+3vfe97OfTQQ9O1a9d07NixxUZS1dbWpra2NrNmzTJvSTt21FFH5aijjlrmx10R358HDx6czTffPL/61a9y7bXXLvUoz89+9rN55513FjnPWuLz8YqirNTUOCZYAfz1r3/NYYcd9qkT8GXpwQcfzD777JPNNtssO+64Y/bdd9986UtfarLvk08+mTFjxiwysW5pEyZMaPyV7NMk4LS9P/7xj9l2222X2eRgK+rzrz26+uqrc8wxx6SystKvTLQrRx55ZG644YbssccejXNtLM+OO+64vPbaaznrrLOy9dZbL9G21dXV5vKgXfD+3HJ8Pl4xCESgHaivr0+pVGqRc6OBJeP5ByyOUqm01HPrAIvP+zPLgkAEAAAAKJylX8wdAAAAYDkjEAEAAAAKRyACAAAAFI5ABAAAACgcgQgAAABQOAIRAAAAoHAEIgAAAEDhCEQAAACAwhGIAAAAAIUjEAEAaGH19fVtXQIA8AkEIgDAMvP6669n7ty5i+xz2WWX5Vvf+lYuvPDCVqnh0EMPzQUXXJBx48a1yv6T5PDDD8/aa6+dk046aYHbt9pqq/Tq1Suvv/56qx0bAFg8AhEAYJn52c9+lnXXXTf/8z//02yfUaNG5dprr819993X4sf/61//mptuuiknnHBCLr300hbff4O11lorY8eOXWikSF1dXaZNm5aqqqpWOzYAsHg6tnUBAEAxTJkyJQ899FDmzp2bUqnUbL9OnTolSVZdddUWPf6ECRPys5/9rPHfV155ZQ455JBsueWWn3qfP/7xjzN27NhUVFSkY8eO6dChQ5LkpZdeSpI8+OCDOeKIIxr7N4xKOf7441NZWdnkPi+99NKstNJKn7omAGDxCEQAgGXi+uuvz9y5c9OvX78ce+yxzfZrCES6d+/eYseeO3duDjnkkEyaNCk77bRTvvWtb+Vb3/pWvvKVr+SBBx7I5ptv/qn2+9RTT+W5555rtn3EiBEZMWLEQrffdtttzW5zySWXfKpaAIAl45QZAKDV1dfX53e/+12S5KSTTmp2dESSxlEWi+qzJEqlUr71rW/l0Ucfzdprr53bbrstRx99dM4+++x8+OGH+fKXv5xHH330U+373nvvzdSpU1NdXZ25c+emrq4u9fX1Of3005Mkv/nNb1IqlRov/fv3T5JMmjRpgdvffPPNxn06nQYAlg2BCADQ6m6++ea89dZbWXnllfOtb32r8fZf//rXOeigg3Lttdc23lZWVpYkqaioWGAff/vb33L++efn5ZdfXuzjlkql/PjHP86NN96Y3r1756677sojjzySH/zgB/nZz36Wn/3sZ5k6dWp22223XH311Ut8v1ZZZZX07NkznTt3TqdOnVJeXt5Y/6fVMEIGAGhdTpkBAFpVXV1dzjrrrCTJEUccscAIiCeeeCJDhw7NqquumsGDByf5v0DkP4OBv//977n++utzyy23LPI0lfmP+/3vfz9//OMf07Vr19x1113ZZJNN8uUvfzkfffRRvva1r+WSSy7J3Llzc8UVV+SYY47Jgw8+mN///vfp3bv3Yt23V199Neecc85CtzfMIfLXv/51gVNmPvzwwyTJD37wgwVGwMycObPx+uzZsxcKgwCAlicQAQBa1TXXXJPXXnstSdKzZ88F2hqCja9+9auNtzWszDJ/IFIqlTJs2LAkyQ9/+MNPPObkyZNz+OGH57777kv37t1zzz33ZIcddkiS7Ljjjrnzzjvz+OOPZ/fdd8/vf//79OnTJ2effXZuuummDB8+POecc06OPvroxtN3mvPee+/lxhtvbLb9+eefz/PPP7/Q7YuaQ2T27Nnp1avXJ95HAGDpOGUGAGg1U6ZMyamnntpk2zvvvJOJEyemrKysMaxI/m+0RMeO//e7zbPPPpt///vfqaqqysEHH7zIY95zzz3ZbLPNct9996V///557LHHstNOOzW2//d//3f+93//t3GejyQ566yzctttt2XVVVfNBx98kGOOOSYbbLBBfvvb32bixInNHmvq1KlJkm222WaBOUH233//JB+vZLM4c4jMf1lzzTUXef8AgJZhhAgA0Gp+8YtfNBsoPPzww0mSjTbaaIFTVGbMmJEkmTNnTuNtt956a5Jkr732anb1mbfffjsnnHBC7rjjjiQfT8o6ZsyYbLbZZktU85e+9KWMGDEi77zzTo499tj8/Oc/zzbbbJMHH3wwXbt2XaDvv//97yRJjx49Frj91VdfTZL07dt3iY4NACw7AhEAoFXcdtttueaaa1JRUZFddtklDzzwwALtDz74YJLki1/84gK3v/vuu0k+Hl2SfHy6zE033ZQkOeCAAxY6Tm1tbX784x/n6quvTm1tbVZbbbVcdNFFGTp0aG688casttpqi3UKyvjx4zNz5swMHjw4++67by655JIMGTIk//73v7PvvvsuFIY0bNNwX5qaTHXvvfdu8lirrLLKImv59re/nT/+8Y+fWDMA8OkJRACAFvfqq6/mmGOOSfLx6Sjvv//+AoFIfX1945wgu+666wLbNixB+/rrryf5f+3dfWiV5R/H8be6uTmNRiwXo1zaclrQkIpoG0UPi0hbrQcsM12mDUtrBstEWzVGUzN0OTcpygrtJNVpI0qkJHqAVmTF6KxlKIWzQ+UfRRznOGfz98fYfu539qTO/MF5v+Bm7Lru+77ue3+ND9f9/cKXX37JwYMHSUlJYfbs2XFrJSUlcffdd7Nz504WL17M6tWrSU9P58MPPwR6PpFZtmzZsM98++2309TUBMA555xDVVUVlZWV7Nq1i8LCwgGvmTp1Kvfdd1/f79FolGAwSCwWY/LkyRQVFfU7v7GxkUgkwl133TVgW+Hvv/+eUCgUt+NEkiSNPgMRSZI06srLy/n7778pKiqioqKCFStW9Jvv6uripZdeYu/evdx000194+FwmN9++w2A7777ju7ubvLz82lra+Pzzz8f9HOZG264gXA4TGpqatxcdXU1dXV1wz5z726P4yUlJXHrrbcOes3DDz/cV+T10KFDLFiwgFgsRlpaGu+9917c7pcLL7yQSCRCQ0MDGRkZcfdbtGgRoVBo0PeUJEmjx0BEkiSNumAwyEMPPURtbe2An5IkJydTUlJCSUlJv/HeuiLQ0ylm7969XHnlleTm5pKbmzvkmgOF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",
      "text/plain": [
       "<Figure size 1280x960 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "## 调用外部自定义函数绘制柱状图\n",
    "mytools.show_bar(df,'伙食费')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3.8.10 64-bit",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10 (tags/v3.8.10:3d8993a, May  3 2021, 11:48:03) [MSC v.1928 64 bit (AMD64)]"
  },
  "orig_nbformat": 4,
  "vscode": {
   "interpreter": {
    "hash": "570feb405e2e27c949193ac68f46852414290d515b0ba6e5d90d076ed2284471"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
